home *** CD-ROM | disk | FTP | other *** search
/ Multimedia Selection / Multimedia Selection Volume One - CD-ROM / MULTIMEDIA SELECTION____________.ISO / utils / gnomes1 / gnomes.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-09-09  |  5.8 KB  |  228 lines

  1. PROGRAM ShowRandomOneLiners;
  2. {------------------------------------------------------------------------------
  3.  
  4.                                 REVISION HISTORY
  5.  
  6. v1.00  : 1993/07/14.  First public release.  DDA
  7. v1.00a : 1993/08/30.  Fixed cursoron procedure, with thanks to David Cheung.
  8.                       Increased allowable length of filename from 12 to 48
  9.                       characters.  DDA
  10. v1.01  : 1993/09/10.  New getcursor and setcursor procedures, via Randall
  11.                           Woodman.  Supercede cursoroff/ cursoron.     DDA
  12.  
  13. ------------------------------------------------------------------------------}
  14.  
  15. USES Dos, Crt;
  16. CONST
  17.    ProgData = 'GNOMES- Free DOS utility: Tagline displayer.';
  18.    ProgDat2 = 'V1.01: September 10, 1993. (c) 1993 by David Daniel Anderson - Reign Ware.';
  19.  
  20.    Usage1 = 'Usage:  GNOMES [/s (simple)] [file to randomly display]';
  21.    Usage2 = '     See gnomes.doc for more details.';
  22. VAR
  23.    OneLinerFile  : Text;
  24.    TheOneLiner   : String;
  25.    TotalLines    : LongInt;
  26.    Simple        : Boolean;
  27.    ctop, cbot    : integer ;
  28.  
  29. { These two cursor procedures are via Randall Woodman }
  30.  
  31. procedure getcursor (var chval, clval : integer );
  32. const
  33.    video  = $0010;
  34.    getcur = $0300;
  35. var
  36.   regs : registers ;
  37. begin
  38.    regs.ax := getcur ;
  39.    intr(video,regs) ;
  40.    chval := regs.ch;  { upper scan line }
  41.    clval := regs.cl;  { lower scan line }
  42. end;
  43.  
  44. procedure setcursor ( startscan, stopscan : integer );
  45. const
  46.   videoio     = $10;
  47.   cursorshape =   1;
  48. var
  49.   regs : registers ;
  50. begin
  51.   with regs do
  52.     begin
  53.       ch:=startscan;
  54.       cl:=stopscan;
  55.       ah:=cursorshape;
  56.       intr(videoio,regs);
  57.     end;
  58. end;
  59.  
  60. PROCEDURE InitializeAll;
  61. VAR
  62.    OLFName       : String[48];
  63.    PS1           : String[2];
  64.    strtline  : string[6];
  65.    valtline  : longint;
  66.    valcode   : integer;
  67. BEGIN
  68.  
  69.      PS1 := Copy(ParamStr(1),1,2);
  70.      IF PS1 = '/s' THEN
  71.      BEGIN
  72.         WriteLn;
  73.         Simple := True;
  74.         OLFName := ParamStr(2);
  75.      END
  76.      ELSE BEGIN
  77.         Simple := False;
  78.         OLFName := ParamStr(1);
  79.      END;
  80.  
  81.      IF OLFName = '' THEN
  82.         OLFName := 'GNOMES.TXT';
  83.  
  84.      Assign(OneLinerFile,OLFName);
  85. {$I-} Reset(OneLinerFile); {$I+}
  86.      IF IOResult <> 0 THEN
  87.      BEGIN
  88.         NormVideo;
  89.         Writeln(ProgData);
  90.         Writeln(ProgDat2);
  91.         Writeln;
  92.         WriteLn(Usage1);
  93.         WriteLn;
  94.         WriteLn(Usage2);
  95.         WriteLn('Unable to open ',OLFName,'.');
  96.         Halt;
  97.      END;
  98.      ReadLn(OneLinerFile,strtline);
  99.      strtline := copy(strtline,1,Length(strtline));
  100.      val(strtline,valtline,valcode);
  101.      if (valcode <> 0) then begin
  102.         NormVideo;
  103.         Writeln(ProgData);
  104.         Writeln(ProgDat2);
  105.         Writeln;
  106.         WriteLn(Usage1);
  107.         WriteLn;
  108.         WriteLn(Usage2);
  109.         writeln('The first line of the file "',OLFName,'" is NOT a valid numeric!');
  110.         writeln('Program aborted.');
  111.         halt;
  112.      end;
  113.      TotalLines := valtline;
  114.  
  115.      getcursor ( ctop, cbot );
  116.      setcursor ( 0, 0 );
  117.      TextAttr := 8;
  118. END;
  119.  
  120. FUNCTION LeadingZero(w : Word) : String;  {Called by WriteDTInf to write time.}
  121. VAR
  122.   s : String;
  123. BEGIN
  124.   Str(w:0,s);
  125.   IF Length(s) = 1 THEN
  126.     s := '0' + s;
  127.   LeadingZero := s;
  128. END;
  129.  
  130. PROCEDURE WriteDTInf;      {Called by DisplayOneLiner to write Date & Time.}
  131. VAR
  132.    Hour,Min,Sec, hund    : Word;
  133.    i : Integer;
  134. BEGIN
  135.      GetTime(Hour,Min,Sec,hund);
  136.      FOR i := 1 to 53 DO
  137.          Write(' ');
  138.  
  139.      Write('System time is:  ');
  140.      WriteLn(LeadingZero(Hour),':',
  141.              LeadingZero(Min),':',
  142.              LeadingZero(Sec));
  143.      FOR i := 1 to 80 DO
  144.          Write('_');
  145.      WriteLn;
  146. END;
  147.  
  148. PROCEDURE WrapOneLiner(var theline : string);
  149. VAR
  150.    PartA,PartB  : String;
  151.    BreakChar    : String[1];
  152. BEGIN
  153.      PartA := Copy(theline,1,80);
  154.      PartB := Copy(theline,81,(Length(theline)-80));
  155.      BreakChar := Copy(PartA,Length(PartA),1);
  156.      Delete(PartA,Length(PartA),1);
  157.  
  158.      if (breakchar = '-') then begin
  159.           partb := breakchar + partb;
  160.           breakchar := copy(parta,length(parta),1);
  161.           delete(parta,length(parta),1);
  162.      end;
  163.      while ((breakchar <> ' ')
  164.         and (breakchar <> '-')) do
  165.      begin
  166.           partb := breakchar + partb;
  167.           breakchar := copy(parta,length(parta),1);
  168.           delete(parta,length(parta),1);
  169.      end;
  170.      if (breakchar = '-') then
  171.         parta := parta + breakchar;
  172.  
  173.      writeln(parta);
  174.      theline := PartB;
  175. END;
  176.  
  177. PROCEDURE DisplayOneLiner;
  178. VAR
  179.    i,
  180.    OneLinerNumb  : Integer;
  181.    DumDum        : Char;    {To trap the key(s) pressed to terminate program.}
  182. BEGIN
  183.      TextAttr := Succ(TextAttr);
  184.      IF ((TextAttr = 15) AND (NOT Simple)) THEN
  185.      BEGIN
  186.         WriteDTInf;
  187.         TextAttr := 9;
  188.      END;
  189.      Reset(OneLinerFile);
  190.      Randomize;
  191.      OneLinerNumb := (Random(TotalLines) + 2);  {To account for 0 and first.}
  192.      FOR i := 1 to OneLinerNumb DO        {   }{───────────┬─────────────}
  193.          ReadLn(OneLinerFile,TheOneLiner);{└─────────────────┘              }
  194.      WHILE Length(TheOneLiner) >= 80 DO
  195.            WrapOneLiner(TheOneLiner);
  196.      WriteLn(TheOneLiner);
  197.      IF (NOT Simple) THEN
  198.      BEGIN
  199.          FOR i := 1 to 80 DO
  200.              Write('_');
  201.          WriteLn;
  202.          FOR i := 1 to 50 DO
  203.              IF (NOT KeyPressed) THEN
  204.                 Delay(95);
  205.      END;
  206.      IF KeyPressed THEN
  207.      BEGIN
  208.         Simple := True;
  209.         WHILE KeyPressed DO
  210.               DumDum := ReadKey;
  211.      END;
  212. END;
  213.  
  214. PROCEDURE CleanUp;
  215. BEGIN
  216.      Close (OneLinerFile);
  217.      setcursor ( ctop, cbot );
  218.      NormVideo;
  219. END;
  220.  
  221. BEGIN
  222.      InitializeAll;
  223.      REPEAT
  224.            DisplayOneLiner;
  225.      UNTIL Simple;
  226.      CleanUp;
  227. END.
  228.